Pingvinromeo, проблема в том что ты фигню творишь
если спел применён в точку то точка есть
перемещение это 1 действие
за это время точка не исчезнет
короче пруфы того что не работает
3 - либо в редакторе объектов в разделе "характеристики" менять стартовое хп и ману, либо на карте открываешь юнита и ставишь ему 100% хп.
2 - триггерами. Событие - юнит умирает, условие - юнит нейтрально-враждебный (какое надо условие - такое и поставишь), действие - создаёшь переменную, даёшь ей рандомное значение, потом создаёшь предмет, в зависимости от числа. Как это делается - читай статьи.
1 - ты имеешь в виду, что он не появляется вместо "случайного моба"?
Вроде бы удалось решить проблему самостоятельно. Ошибка действительно была элементарной - идентификатор не устраивал введённый туда заглавный символ, а я не знал об этом. Простите за беспокойство.
После создания, погодный эффект нужно занести в переменную и включить его (там есть действие). Когда нужно изменить погодный эффект, то старый нужно удалить, для этого мы его занесли в переменную.
В РО у способности есть есть строка Графика - Анимации, там указываешь ту, что хочешь видеть при её использовании. Например, для Огненных стрел Жрицы Луны используется анимация attack, для Молота бурь Горного Короля анимация spell throw, а для Покоя Хранителя Рощи анимация spell channel. Для двух последних способностей в РО указывается два слова, оба слова через пробел не работают, например, указывай отдельно spell и throw или spell и channel. Если у модели нет анимаций с таким названием, но есть анимации, которые содержат одно из этих слов, то будут проигрываться они. Там ещё есть тонкости, о которых долго печатать надо, да и они тебе могут не понадобиться. Пробуй.
То, что я скинул -- это тебе и GUI, и MUI, и все 33 удовольствия. Даже рассеиванием рассеивается, прикинь? Не то, что все эти ваши триггерные баффы, которые ещё и не отслеживаете часто.
После ворот на арене ставишь одну область, в клетке делаешь вторую область. Создаёшь триггер с событием Generic unit Enters Rect (первая область), там первое действие в категории Декорация - Open/Close Gate вроде, следующее действие в категории Отряд второе в списке, там выбираешь вторую область, которая в клетке, а действие указываешь Боевая единица - Move (Picked unit) instantly to (первая область).
Группы юнитов + хэш или структуры. При касте спелла берешь кастера, берешь его ID, проверяешь не записана ли группа в какой-либо из ячеек. Если нет - создаешь группу и записываешь её в ячейку. При смерти юнита делаешь проверку не записана ли по его ID группа юнитов - если записана - удаляешь его и проверяешь количество юнитов в группе и если оно равно 0 - удаляешь группу. Естественно хэш тоже чистишь всюду где нужно.
Это звучит как "Сделайте мне пожалуйста систему формаций". Чтобы научить тебя как это сделать придётся потратить несколько десятков часов. И тут 2 варианта: либо ты будешь читать статьи и выучишь всё сам, либо обращайся к отдельным пользователям и проси о приватных, платных, уроках в частном порядке.
Вопрос вообще ни о чём. То, о чём ты спрашиваешь делается за 20-30 минут + несколько часов на всякие плюшки и дебаг (в худшем случае).
function Trig_d_Actions takes nothing returns nothing
set udg_H = InitHashtable()
set udg_Dest[1] = gg_dest_LTcr_0000
call TriggerRegisterDeathEvent( gg_trg_t, udg_Dest[1] )
endfunction
//===========================================================================
function InitTrig_d takes nothing returns nothing
set gg_trg_d = CreateTrigger( )
call TriggerAddAction( gg_trg_d, function Trig_d_Actions )
//Map Initialization
endfunction
function T takes nothing returns nothing
local widget w = GetTriggerDestructable()
local real x = GetWidgetX(w)
local real y = GetWidgetY(w)
local itempool ItemPool = CreateItemPool()
local item i
local unit u = LoadUnitHandle(udg_H, StringHash("System"), StringHash("UNIT"))
call ItemPoolAddItemType(ItemPool, 'phea', 60)
call ItemPoolAddItemType(ItemPool, 'pman', 40)
set i = PlaceRandomItem(ItemPool, x, y)
call DestroyItemPool(ItemPool)
call UnitAddItem(u, i)
set ItemPool = null
set i = null
set u = null
endfunction
//===========================================================================
function InitTrig_t takes nothing returns nothing
set gg_trg_t = CreateTrigger( )
call TriggerAddAction( gg_trg_t, function T )
endfunction
function Trig_vsd_Actions takes nothing returns nothing
call SaveUnitHandle(udg_H, StringHash("System"), StringHash("UNIT"), GetOrderedUnit())
endfunction
//===========================================================================
function InitTrig_vsd takes nothing returns nothing
set gg_trg_vsd = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_vsd, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddAction( gg_trg_vsd, function Trig_vsd_Actions )
endfunction
При осмотре карты тоже не совсем понял почему игра перестает строительство. Как решение, ты можешь даммику строительства поменять расу на нежить, таким образом уже здание само будет достраиваться.
Поскольку у тебя на карте при беглом осмотре юнитов строителей я не заметил, то выше указанное решение как раз то что нужно тебе.
П.С.
Под какую версию игры рассчитана данная карта?
Конечно можно! Для этого надо в поле "авторы" ресурса указать автора оригинального материала и поместить ссылку на оригинальный материал в соответствующее поле.
Пример: xgm.guru/p/cp2077/better-minimap
Если вы как-либо модифицировали этот материал, в поле "авторы" можно через | дописать и свой никнейм.
Стоит помнить, если автор обратится к нам с просьбой удалить ресурс - нам придется снять такой ресурс с публикации и убрать видимость. Но это не будет считаться нарушением правил.
Важно: Это касается только открытых материалов. Если вы его купили и/или там есть явный запрет на распространение - не стоит загружать такие материалы к нам на сайт без уточнения у Администрации.
По поводу материалов, используемых внутри модов или карт - нужно завести спец. раздел/квест/титры и перечислить их там в нужных категориях.
чет все равно не понимаю, как сделать проверку
юнит получил урон, если юнит = юнит из переменной UnitsBuffed - запустить триггер?
Как вместо индекса указать любой юнит из переменной?
Получилось, вот такая штука нужна была как на втором скрине, все равно оставлю тему, мб кому пригодится еще
quq_CCCP, извлёк. Теперь мне засунуть этот код в копию этой карты, которую в редакторе кампаний добавить в кампанию и сохранить? Вроде как получается то же самое, как при сохранении карты в JNGP отдельно, а потом её добавлении в кампанию.
P. S. Цвета персонажей слетели при этом способе, а они очень важны. Хотя так код и правда работает.
P. P. S. Сначала карта запускалась, но цвета юнитов менялись, код срабатывал. Потом решил повторить это(замену файла war3map.j), внеся изменения в простые триггеры, но карта уже не запускалась.
P. P. P. S. Короче, разобрался в причине того, что карта не запускалась, я её с рабочего стола загружал и сохранял. Видимо из-за русских символов в пути не получалось. Если карта лежит в папке maps, то нормально. Но проблема с другими цветами персонажей, а точнее красным цветом, так и осталась. В итоге решил не мучиться, а сделать всё обычными триггерами.
Кстати, из триггера убрали элементы vjass, код стал таким, но всё равно не сохранялся в кампании:
globals
timer alp_t = CreateTimer()
integer alp_m = 0
unit array alp_a
boolean array alp_f
integer array alp_alpha
real array alp_speed
real array alp_time
endglobals
function TimeUnitAlpha takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
exitwhen i>alp_m
if GetWidgetLife(alp_a[i])>0.405 and alp_time[i]>0 then
if alp_f[i] then
set alp_alpha[i] = alp_alpha[i] + R2I(alp_speed[i])
else
set alp_alpha[i] = alp_alpha[i] - R2I(alp_speed[i])
endif
call SetUnitVertexColor(alp_a[i],255,255,255,alp_alpha[i])
set alp_time[i] = alp_time[i] - 0.05
else
if alp_f[i] then
call SetUnitVertexColor(alp_a[i],255,255,255,255)
endif
set alp_a[i] = alp_a[alp_m]
set alp_f[i] = alp_f[alp_m]
set alp_time[i] = alp_time[alp_m]
set alp_alpha[i] = alp_alpha[alp_m]
set alp_speed[i] = alp_speed[alp_m]
set alp_m = alp_m - 1
if alp_m==0 then
call PauseTimer(alp_t)
endif
endif
endloop
endfunction
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть )
call AddUnitAlpha(Caster,3,0,255,true) = Появится за 3 секунды
call AddUnitAlpha(Caster,3,255,255,false) = Исчезнет за 3 секунды
function AddUnitAlpha takes unit A,real TIMES,integer ALPHA,integer MAX_ALPHA,boolean F returns nothing
set alp_m = alp_m + 1
set alp_a[alp_m] = A
set alp_f[alp_m] = F
set alp_time[alp_m] = TIMES+0.10
set alp_alpha[alp_m] = ALPHA
set alp_speed[alp_m] = MAX_ALPHA/TIMES*0.05
if alp_m==1 then
call TimerStart(alp_t,0.05,true,function TimeUnitAlpha)
endif
endfunction
Вджасс это дополнение к обычному джассу, у себя ты можешь видеть строки объявления библиотеки, продвинутые комментарии и статические константные переменные
В том и дело что ОТВЕТА - НЕТ.Способность я НЕ кастую.Я проверяю - есть ли она у героя, и какого она уровня. Мне нужна ПАССИВНАЯ, способность. В данном случае моя способность блокирует часть урона, в зависимости от уровня, она не является пустышкой. Всё. Теперь я в тригере делаю проверку - что способность у героя есть. И если она есть, то на каждом 20-м ударе по герою, будет добавлятся способность - защита +10, или больше, взависимости от уровня способности, и затем через 30 секунд удалятся.
Я не спрашивал как кастовать скилл, и как с ним работать.
Я спросил другое:
ПОЧЕМУ? Почему способность сама по себе работает(ОНА ПАССИВНАЯ, и она работает), а обращение к ней тригера(ПРОВЕРКА того что, способность у героя есть), даже если сам тригер не активируется(СОБЫТИЕ, ещё ни разу не произошло, или галочка "изначально включен" убрана), ломает игру?
Прочитай внимательно всё что я писал пожалуйста, у меня просто ощущение что ты не всё прочитал, и не всё скрины посмотрел.
В общем и целом. Подвожу итоги:
Проблема оказалась конкретно в способности. Я так посмотрел, она видимо каким-то образом забаговалась.
Она была сделана на основе способности "каменные доспехи", но конкретно у этой способности почему-то изначальная раса была "наги". Т.е. это уже странно, потому что эта способность изначально от "ночных эльфов". Кроме этого, я отличий от стандарта в ней никаких не видел.
Я ее удалил, создал абсолютно такую же способность, и она работает, всё запускается. Скилл(тригерный) я сделал ровно так как и хотел, никакой ошибки в нём нет и не было в помине, о чем я в принципе подозревал с самого начала. Не знаю с чем связать этот баг, поэтому в принципе вопрос закрываю. Ответ на него я нашёл сам: это баг редактора.
Других вариантов я не вижу.
Скачиваешь этот файл: xgm.guru/files/100/179980/comments/336580/War3Patch.txt
Далее открываешь архив War3Patch.mpq в редакторе mpq (например Ladik's MPQ Editor) и используешь файл в качестве listfile.
Модель будет лежать по этому пути: Units\Creeps\HeroTinker\HeroTinker.mdx
Без явных доказательств принадлежности этого аккаунта - никак. Есть есть, то просьба обратиться в личку или через форму обратной связи (с указание контактного почтового адреса)
А может ли быть дело не в триггерах, а к примеру в моделях? Кто нибудь когда нибудь сталкивался с фризами из-за используемых моделей?
Это звучит глупа... Фризы из-за модели...
Тем не менее, попробовал удалить весь импорт из карты (около 6 МБ, 157 файлов mdx). Лаги и фризы прекратились. Сейчас дихотомией пробую найти проблемную модель. Хотя может проблемная модель и не одна, или например может быть накапливаемый эффект, который так не найти.
Сильно уменьшил число лагов, избавившись от двух моделей. Эти модели ещё и сами по себе вели себя странно. В частности, фундамент из модели Домика произвольно прикреплялся к анимациям других моделей. А модель Академии иногда меняла свой видимый масштаб без причины.
сорян за некропост, но дам ответ на данный вопрос, т.к. появились нужные знания
эта функция утечна на 1.26, а точнее сам локальный звук, поэтому лучше юзать глобалки заготовленные и ресайкл систему, но там настолько ущербная утечка, что её можно и проигнорить в принципе
Пока юнит разлагается и ты видишь на земле труп, юнит занимает место в памяти, если же юнит разложился -то его уже нет и память он не занимает.
Разумеется в картах типа товер дефенсов имеет смысл сокращать время сокращения или делать суммонами, чтобы после смерти они исчезали не оставляя трупы - вспомните что происходит с духами волков после их убийства. Но тут палка о двух концах, юниты могут наносить урон и убивать других юнитов - так вот если какой нить самон плюнет во врага и сдохет, а тычка долетит до цели через некоторое время и убьет - убивший юнит будет равен null, в доте есть такой баг, змейки веномансера имеют ядовитую атаку и часто обеспечивают суецид врагам, не давая бабки за фраг их хозяину.
Ну я сегодня за кэпа, обьясню вкратце: Утечки - это необнуленные переменные и всякий прочий темпо-мусор, который засоряет собой оперативку игры.
Многие функции ГУИ(триггеров) содержат в себе незначительные утечки - к примеру всякие математические функции, некоторые же содержат значительные утечки - например, функция "двигать в точку" создает целый обьект "локация", который там и остается, а по хорошему должен быть удален.
Обычно, это все не важно, если ты не создаешь сложных триггеров с малым интервалом. Например, у тебя есть способность "блинк", которая триггерно двигает юнита в точку - от такой способности не создастся так много точек, что у тебя начнет тормозить игра, даже за час непрерывного спама.
А вот если у тебя есть способность, которая двигает юнита таким образом каждые 0.01 сек (в течение 1 секунды он плавно летит, к примеру) - то тут лучше бы за собой убирать.
Когда ты поймешь насколько утечные ГУИ функции, ты начнешь постепенно переходить на Джасс, а когда ты поймешь насколько много текста на джассе ты должен напечатать даже для того чтобы просто нанести урон в области и навесить эффект - на этом моменте тебе расхочется делать карты.)
» WarCraft 3 / Триггерное заклинание не работает, как нужно.
» WarCraft 3 / не меняет хп мобу
» WarCraft 3 / Где лежит модель юнита?
» WarCraft 3 / Изменение погоды
» WarCraft 3 / Война Азерота 4
» WarCraft 3 / Война Азерота 4
» WarCraft 3 / Война Азерота 4
» WarCraft 3 / Заклинание покой
» WarCraft 3 / legion arena
» WarCraft 3 / www
» Администрация XGM / Оффтопка
» WarCraft 3 / разділяй і враждуй
» WarCraft 3 / Дайте русификатор!
» WarCraft 3 / Тригерное создание юнита
» WarCraft 3 / Координаты предмета
» WarCraft 3 / Что с Хайвом?
» Администрация XGM / Не сбрасывает счётчик новых комментариев
» WarCraft 3 / Не запускается карта. Jass
» WarCraft 3 / Ищу карту)
» WarCraft 3 / Скрытые файлы MPQ
» Администрация XGM / Как удалить аккаунт?
» WarCraft 3 / Утечка памяти